package proto

import (
	"fmt"
	"regexp"
	"sort"
	D "websocket_apn/define"
	"websocket_apn/log"
)

//地图数据
var ZongMenTraitMap = map[byte]string{
	//宗门1级
	0xB7: "胆小 抗暴击+0.5%",
	0xBC: "冷静 抗连击+0.5%",
	0xC1: "虚张声势 抗反击+0.5%",
	0xC6: "跟屁虫 抗闪避+0.5%",
	0xCB: "贫血 抗吸血+0.5%",
	0xD0: "愣头愣脑 抗击晕+0.5%",

	//宗门2级
	0x99: "急性子 暴击+0.5%",
	0x9E: "话痨 连击+0.5%",
	0xA3: "暴脾气 反击+0.5%",
	0xA8: "机灵鬼 闪避+0.5%",
	0xAD: "尖牙利齿 吸血+0.5%",
	0xB2: "诡诈 击晕+0.5%",

	//宗门3级
	0xB8: "唯唯诺诺 抗暴击+1%",
	0xBD: "沉几观变 抗连击+1%",
	0xC2: "不屈不挠 抗反击+1%",
	0xC7: "跟踪狂 抗闪避+1%",
	0xCC: "厚皮老脸 抗吸血+1%",
	0xD1: "铁头功 抗击晕+1%",

	//宗门5级
	0x9A: "锐眼通明 暴击+1%",
	0x9F: "手脚麻利 连击+1%",
	0xA4: "后发制人 反击+1%",
	0xA9: "脚底抹油 闪避+1%",
	0xAE: "蚊子转世 吸血+1%",
	0xB3: "精通闷棍 击晕+1%",

	//宗门7级
	0xB9: "隐脉闭经 抗暴击+1.5%",
	0xBE: "临危不惧 抗反击+1.5%",
	0xC3: "以德服人 抗连击+1.5%",
	0xC8: "见微知著 抗闪避+1.5%",
	0xCD: "一心向道 抗吸血+1.5%",
	0xD2: "一往无前 抗击晕+1.5%",

	//宗门10级
	0x9B: "破绽洞察 暴击+1.5%",
	0xA0: "一鼓作气 连击+1.5%",
	0xA5: "先破后立 反击+1.5%",
	0xAA: "第六感 闪避+1.5%",
	0xAF: "嗜血如命 吸血+1.5%",
	0xB4: "笑里藏刀 击晕+1.5%",

	//宗门12级
	0xD5: "武痴 攻击+1%",
	0xD8: "温和 生命+1%",
	0xDB: "皮糙肉厚 防御+1%",

	//宗门14级
	0xDE: "猫奴 强化灵兽+1%",
	0xE1: "嗜酒 弱化灵兽+1%",
	0xE4: "炼药师 强化治疗+1%",
	0xE7: "毒师 弱化治疗+1%",
	0xEA: "调皮 强化暴伤+1.5%",
	0xED: "稳重  弱化暴伤+1.5%",

	//宗门16级
	0xF0: "修真奇才 最终增伤+0.5%",
	0xF3: "幸运儿 最终减伤+0.5%",

	//宗门18级
	0xBA: "功德加身 抗暴击+2%",
	0xBF: "高瞻远瞩 抗连击+2%",
	0xC4: "见招拆招 抗反击+2%",
	0xC9: "神机妙算 抗闪避+2%",
	0xCE: "浩然正气 抗吸血+2%",
	0xD3: "正气之歌 抗击晕+2%",

	//宗门20级
	0x9C: "势如破竹 暴击+2%",
	0xA1: "风驰电掣 连击+2%",
	0xA6: "以牙还牙 反击+2%",
	0xAB: "心眼通 闪避+2%",
	0xB0: "饕餮盛宴 吸血+2%",
	0xB5: "偷袭大师 击晕+2%",

	//宗门22级
	0x00: "天生神力 攻击+2%",
	0xD9: "生机盎然 生命+2%",
	0xDC: "钢筋铁骨 防御+2%",

	//宗门24级
	0xDF: "资深猎人 强化灵兽+2%",
	0xE2: "凶神恶煞 强化治疗+2%",
	0xE5: "妙手回春 弱化灵兽+2%",
	0xE8: "炼蛊奇才 弱化治疗+2%",
	0xEB: "心狠手辣 强化暴伤+3%",
	0xEE: "中正平和 弱化暴伤+3%",

	//宗门26级
	0xF1: "妖尊遗孤 最终增伤+1%",
	0xF4: "道心自成 最终减伤+1%",

	//宗门28级
	0xBB: "料事如神 抗暴击+3%",
	0xC0: "真气缭绕 抗连击+3%",
	0xC5: "天罡护体 抗反击+3%",
	0xCA: "火眼金睛 抗闪避+3%",
	0xCF: "破煞之躯 抗吸血+3%",
	0xD4: "风魔九伯 抗击晕+3%",

	//宗门30级
	0x9D: "逆天气运 暴击+3%",
	0xA2: "八臂修罗 连击+3%",
	0xA7: "眶毗必报 反击+3%",
	0xAC: "浩瀚神识 闪避+3%",
	0xB1: "血煞圣体 吸血+3%",
	0xB6: "镜花水月 击晕+3%",

	//宗门32级
	0xD7: "以力证道 攻击+3%",
	0xD:  "天地同寿 生命+3%",
	0xDD: "先天之体 防御+3%",

	//宗门35级
	0xE0: "驯兽大师 强化灵兽+3%",
	0xE3: "金刚怒目 弱化灵兽+3%",
	0xE6: "悲天悯人 强化治疗+3%",
	0xE9: "祸乱毒体 弱化治疗+3%",
	0xEC: "力拔山兮 强化暴伤+4.5%",
	0xEF: "神觉卫道 弱化暴伤+4.5%",

	//宗门40级
	0xF2: "天帝灵脉 最终增伤+2%",
	0xF5: "不灭神躯 最终减伤+2%",
}

func CheckIsBoyByGender(info D.ZoneMenInfo) bool {
	if info.Gender == 1 || info.Gender == 2 || info.Gender == 3 || info.Gender == 7 || info.Gender == 8 {
		return true
	}
	return false
}

func GetZongMenInfoDesc(info D.ZoneMenInfo) string {
	Aptitude := ""
	switch len(info.Aptitude) {
	case 1:
		Aptitude = "平平无奇"
	case 2:
		Aptitude = "灵心慧性"
	case 3:
		Aptitude = "天纵之姿"
	case 4:
		Aptitude = "神骨天生"
	case 5:
		Aptitude = "造化圣体"
	case 6:
		Aptitude = "成帝之姿"
	}
	Gender := ""
	if info.IsBoy {
		Gender = "男"
	} else {
		Gender = "女"
	}
	desc := ""
	if info.Index > 0 {
		desc += fmt.Sprintf("%2d ", info.Index)
	}
	desc += fmt.Sprintf("%s弟子 %s %s %d级 进度(%d/%d)", Gender, Aptitude, info.Name, info.Level, info.Schedule, int(info.Level)*20)
	if info.Attr > 0 {
		desc += fmt.Sprintf(" %s:%.1f%%", D.GetAttrDesc(info.Attr), float32(info.AttrVal)/10)
	}
	if len(info.Aptitude) > 0 {
		desc += " ["
		for _, aptitude := range info.Aptitude {
			if val, ok := ZongMenTraitMap[aptitude]; ok {
				desc += fmt.Sprintf("%02X%s ", aptitude, val)
			}
		}
		desc += "]"
	}
	if info.Pairing {
		desc += " 配对中"
	}
	return desc
}

/*


    总长度 序号         编号            天赋           名                      称                                                                                                             进度
12 5A 08 01 12 47 08 99 08 10 03 18 B3 B6 15 18 CB B6 15 18 B2 B6 15 20 1D 2A 09 E6 9E 97 E4 B8 AD E6 B8 B8 30 96 4E 38 03 40 00 4A 06 08 03 12 02 33 37 4A 08 08 02 12 04 32 31 39 32 4A 07 08 01 12 03 32 30 35 62 01 30 68 00 70 00 1A 0D 08 01 10 BB 01 18 78 20 C1 DA BD B9 06
12 5A 08 02 12 47 08 9A 08 10 03 18 B3 B6 15 18 B2 B6 15 18 A8 B6 15 20 1D 2A 09 E9 A3 8E E6 9F 94 E5 84 BF 30 92 4E 38 06 40 00 4A 06 08 03 12 02 33 37 4A 08 08 02 12 04 32 32 30 37 4A 07 08 01 12 03 32 30 31 62 01 30 68 00 70 00 1A 0D 08 02 10 BA 01 18 78 20 C1 DA BD B9 06
12 52 08 03 12 3F 08 9B 08 10 01 18 BC B6 15                         20 1D 2A 09 E7 B4 AB E8 A1 A3 E5 B0 98 30 93 4E 38 08 40 00 4A 06 08 03 12 02 33 37 4A 08 08 02 12 04 31 36 30 37 4A 07 08 01 12 03 31 34 31 62 01 30 68 00 70 00 1A 0D 08 03 10 BA 01 18 78 20 C1 DA BD B9 06
12 52 08 04 12 3F 08 9C 08 10 01 18 A8 B6 15                         20 1D 2A 09 E7 B4 AB E6 9B BC E5 A6 83 30 93 4E 38 06 40 00 4A 06 08 03 12 02 33 37 4A 08 08 02 12 04 31 35 37 35 4A 07 08 01 12 03 31 35 34 62 01 30 68 00 70 00 1A 0D 08 04 10 BA 01 18 78 20 C1 DA BD B9 06
12 56 08 05 12 43 08 9D 08 10 02 18 B3 B6 15 18 9F B6 15             20 1D 2A 09 E5 89 91 E6 97 A0 E7 97 95 30 96 4E 38 07 40 00 4A 06 08 03 12 02 33 37 4A 08 08 02 12 04 31 38 37 31 4A 07 08 01 12 03 31 38 30 62 01 30 68 00 70 00 1A 0D 08 05 10 BA 01 18 78 20 C1 DA BD B9 06

18 98 08 20 02 28 A9 E6 BD 01 28 AA E6 BD 01 28 AB E6 BD 01 28 AC E6 BD 01 28 AD E6 BD 01 28 AE E6 BD 01 28 AF E6 BD 01 28 B0 E6 BD 01

*/
//培训结果
func ParaZoneMenInfo(dataBytes []byte) []D.ZoneMenInfo {
	var allInfo []D.ZoneMenInfo
	if len(dataBytes) < 4 {
		return nil
	}
	data := BytesToHexStr(dataBytes)
	// 匹配弟子信息                                   2 序号                       3 编号             4 特质数量          5 特质              6 等级                      7 弟子姓名             8              9               10                                      11 当前培养进度
	re := regexp.MustCompile(`12([0-9A-F]{2})08([0-9A-F]{2})12[0-9A-F]{2}08([0-9A-F]{4})10([0-9A-F]{2})((?:18[0-9A-F]{2}B615)+?)20([0-9A-F]{2})2A[0-9A-F]{2}((?:[0-9A-F]{2})+?)30([0-9A-F]{4})38([0-9A-F]{2})40([0-9A-F]{2})4A(?:[0-9A-F]{2})+?080[1-5]10((?:[0-9A-F]{2}){1,2})18`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	// 打印结果
	for _, regRes := range res {
		info := D.ZoneMenInfo{
			Name:     HexDataStrToStr(regRes[7]),           //弟子姓名
			Index:    int(OneByteHexStrToByte(regRes[2])),  //弟子序号
			Num:      regRes[3],                            //弟子编号
			Level:    OneByteHexStrToByte(regRes[6]),       //弟子等级
			Schedule: int(ParaIntDataByHexStr(regRes[11])), //培养进度
			Res8:     regRes[8],                            //
			Gender:   OneByteHexStrToByte(regRes[9]),       //性别类型
			IsBoy:    false,                                //是男孩
			Res10:    OneByteHexStrToByte(regRes[10]),      //
		}
		if CheckIsBoyByGender(info) {
			info.IsBoy = true
		} // 6 8 9
		// 匹配特质
		re0 := regexp.MustCompile(`18([0-9A-F]{2})B615`)
		res0 := re0.FindAllStringSubmatch(regRes[5], -1)
		for _, regRes := range res0 {
			aptitude := OneByteHexStrToByte(regRes[1])
			if aptitude >= 0xF0 && aptitude <= 0xFF {
				info.IsDamage = true
			}
			info.Aptitude = append(info.Aptitude, aptitude)
		}
		allInfo = append(allInfo, info)
		//log.Infof("%+v", info)
		//log.Infof("%+v", GetZongMenInfoDesc(info))
	}
	return allInfo
}

/*
71 AB 00 00 06 3A 00 00 2E 4F 00 00 02 D4 07 01 81 E2 08 00

              1 所属道友ID                       2 所属道友名                                         3 弟子编号  4 天赋数量       5 天赋                                           6 等级           7 弟子姓名                 8       9     10                攻击              防御                           生命                             11 属性    12 属性值
12 7F    08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 57 08 87 08 10 04 18 A5 B6 15 18 DC B6 15 18 B7 B6 15 18 C7 B6 15             20 1D 2A 09 E7 99 BE E5 B7 9D E6 B8 B8 30 95 4E 38 03 40 01 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 37 36 39 37 4A 07 08 01 12 03 37 34 30    52 07 08 09 12 03 31 30 34 62 03 31 30 34 68 68 70 00 20 00                28 00                30 00 38 A9 E6 BD 01
12 83 01 08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 5B 08 88 08 10 05 18 A1 B6 15 18 BC B6 15 18 B0 B6 15 18 F3 B6 15 18 9F B6 15 20 1D 2A 09 E7 B4 AB E7 BB AB E4 BB 99 30 95 4E 38 09 40 01 4A 07 08 03 12 03 31 31 37 4A 08 08 02 12 04 38 36 33 32 4A 07 08 01 12 03 38 31 31    52 07 08 0D 12 03 31 31 38 62 03 31 31 38 68 76 70 00 20 00                28 00                30 00 38 A9 E6 BD 01
12 80 01 08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 51 08 8B 08 10 03 18 B3 B6 15 18 BC B6 15 18 C7 B6 15                         20 1D 2A 09 E6 97 A0 E5 9E A0 E9 81 93 30 9C 4E 38 07 40 01 4A 07 08 01 12 03 36 34 36 4A 07 08 03 12 03 31 31 36    4A 08 08 02 12 04 36 38 34 32 52 06 08 0A 12 02 39 32    62 02 39 32    68 5C 70 00 20 D5 C6 C5 EF B1 32 28 00                30 04 38 A9 E6 BD 01 40 1D
12 83 01 08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 5B 08 8E 08 10 05 18 A6 B6 15 18 F3 B6 15 18 BD B6 15 18 D8 B6 15 18 C2 B6 15 20 1D 2A 09 E9 A3 8E E7 BB AE E7 99 BD 30 AC 4E 38 08 40 01 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 38 38 30 37 4A 07 08 01 12 03 37 37 34    52 07 08 07 12 03 31 30 32 62 03 31 30 32 68 66 70 00 20 00                28 00                30 00 38 A9 E6 BD 01
12 78    08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 49 08 8F 08 10 01 18 9E B6 15                                                 20 1D 2A 09 E7 B4 AB E9 9C 84 E5 AE 97 30 96 4E 38 07 40 01 4A 07 08 01 12 03 34 36 32 4A 07 08 03 12 03 31 31 36    4A 08 08 02 12 04 35 30 32 34 52 06 08 09 12 02 35 35    62 02 35 35    68 37 70 00 20 AC D1 C4 EF B1 32 28 00                30 04 38 A9 E6 BD 01 40 1D
12 83 01 08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 5B 08 92 08 10 05 18 F1 B6 15 18 AD B6 15 18 B2 B6 15 18 9F B6 15 18 BA B6 15 20 1D 2A 09 E6 98 9F E8 BE B0 E9 80 B8 30 96 4E 38 02 40 01 4A 07 08 03 12 03 31 31 39 4A 08 08 02 12 04 38 38 30 34 4A 07 08 01 12 03 37 39 33    52 07 08 07 12 03 31 30 39 62 03 31 30 39 68 6D 70 00 20 00                28 00                30 00 38 A9 E6 BD 01
12 7C    08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 4D 08 94 08 10 02 18 C6 B6 15 18 99 B6 15                                     20 1D 2A 09 E6 98 9F E8 BE B0 E9 80 B8 30 95 4E 38 03 40 01 4A 07 08 01 12 03 35 35 36 4A 07 08 03 12 03 31 31 36    4A 08 08 02 12 04 36 31 32 37 52 06 08 0A 12 02 37 34    62 02 37 34    68 4A 70 00 20 88 95 C5 EF B1 32 28 00                30 04 38 A9 E6 BD 01 40 1D
12 84 01 08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 55 08 97 08 10 04 18 B4 B6 15 18 D2 B6 15 18 E7 B6 15 18 C8 B6 15             20 1D 2A 09 E7 8E 89 E6 B8 85 E5 AE 97 30 94 4E 38 07 40 01 4A 07 08 01 12 03 37 32 39 4A 07 08 03 12 03 31 31 36    4A 08 08 02 12 04 37 38 35 31 52 06 08 08 12 02 38 32    62 02 38 32    68 52 70 00 20 AF AF C5 EF B1 32 28 00                30 04 38 A9 E6 BD 01 40 1D
12 7D    08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 55 08 F6 07 10 04 18 F0 B6 15 18 BC B6 15 18 A8 B6 15 18 B7 B6 15             20 1D 2A 09 E6 B2 AB E7 90 B3 E5 A6 83 30 95 4E 38 06 40 01 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 37 38 30 38 4A 07 08 01 12 03 37 31 34    52 06 08 10 12 02 39 39    62 02 39 39    68 63 70 00 20 00                28 00                30 00 38 A9 E6 BD 01
12 8F 01 08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 5B 08 F9 07 10 05 18 EE B6 15 18 EA B6 15 18 A3 B6 15 18 C3 B6 15 18 B3 B6 15 20 1D 2A 09 E4 BA 91 E5 BD B1 E5 B0 98 30 92 4E 38 08 40 01 4A 07 08 01 12 03 38 32 34 4A 07 08 03 12 03 31 31 37    4A 08 08 02 12 04 39 30 37 37 52 07 08 0A 12 03 31 31 34 62 03 31 31 34 68 72 70 00 20 A2 D7 BC EF B1 32 28 E9 AF 97 B9 C0 5A 30 03 38 A9 E6 BD 01 40 00
12 7F    08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 57 08 FA 07 10 04 18 BE B6 15 18 B2 B6 15 18 C8 B6 15 18 99 B6 15             20 1D 2A 09 E8 A1 8C E4 BA 91 E4 BB 99 30 95 4E 38 02 40 01 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 37 38 31 37 4A 07 08 01 12 03 37 33 32    52 07 08 08 12 03 31 30 31 62 03 31 30 31 68 65 70 00 20 00                28 00                30 00 38 A9 E6 BD 01
12 7D    08 E2 83 86 B8 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 1A 55 08 FD 07 10 04 18 C8 B6 15 18 D0 B6 15 18 A8 B6 15 18 CC B6 15             20 1D 2A 09 E6 B1 9F E6 B9 96 E6 B8 B8 30 95 4E 38 02 40 01 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 37 35 34 35 4A 07 08 01 12 03 37 36 34    52 06 08 07 12 02 39 39    62 02 39 39    68 63 70 00 20 00                28 00                30 00 38 A9 E6 BD 01


*/
//未结伴弟子列表
func ParaZoneMenAloneInfo(dataBytes []byte) []D.ZoneMenInfo {
	var allInfo []D.ZoneMenInfo
	data := BytesToHexStr(dataBytes)
	if len(dataBytes) == 2 {
		return nil
	}
	// 定义正则表达式                                          1 所属道友ID                  2 所属道友名                       3 弟子编号       4 天赋数量    5 天赋                       6 等级                      7 弟子姓名           8              9              10                                              11 属性                12 属性值                              13  结伴到期时间     14 指定结伴       15
	re := regexp.MustCompile(`(?:12|1A)(?:[0-9A-F]{2}){1,2}08([0-9A-F]{12})12[0-9A-F]{2}((?:[0-9A-F]{2})+?)1A[0-9A-F]{2}08([0-9A-F]{4})10([0-9A-F]{2})((?:18[0-9A-F]{2}B615)+?)20([0-9A-F]{2})2A[0-9A-F]{2}((?:[0-9A-F]{2})+?)30([0-9A-F]{4})38([0-9A-F]{2})40([0-9A-F]{2})4A(?:[0-9A-F]{2})+?52[0-9A-F]{2}08([0-9A-F]{2})12[0-9A-F]{2}((?:3[0-9])+?)62(?:[0-9A-F]{2})+?20(00|[0-9A-F]{12})28(00|[0-9A-F]{12})30([0-9A-F]{2})38`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	// 打印结果
	for _, regRes := range res {
		info := D.ZoneMenInfo{
			PID:      regRes[1],                            //所属道友ID
			PName:    HexDataStrToStr(regRes[2]),           //所属道友名字
			Name:     HexDataStrToStr(regRes[7]),           //弟子姓名
			Num:      regRes[3],                            //弟子编号
			Level:    OneByteHexStrToByte(regRes[6]),       //弟子等级
			Res8:     regRes[8],                            //
			Gender:   OneByteHexStrToByte(regRes[9]),       //性别类型
			IsBoy:    false,                                //是男孩
			Res10:    OneByteHexStrToByte(regRes[10]),      //
			Attr:     int(OneByteHexStrToByte(regRes[11])), //属性
			AttrVal:  HexDataStrToInt64(regRes[12]),        //属性值
			Pairing:  false,                                //是否在结伴中
			IsDamage: false,                                //是否是增减伤属性
		}
		if CheckIsBoyByGender(info) {
			info.IsBoy = true
		}
		// 匹配特质
		re0 := regexp.MustCompile(`18([0-9A-F]{2})B615`)
		res0 := re0.FindAllStringSubmatch(regRes[5], -1)
		for _, regRes := range res0 {
			aptitude := OneByteHexStrToByte(regRes[1])
			if aptitude >= 0xF0 && aptitude <= 0xFF {
				info.IsDamage = true
			}
			info.Aptitude = append(info.Aptitude, aptitude)
		}
		if len(regRes[13]) > 4 {
			info.Pairing = true
		}
		allInfo = append(allInfo, info)
	}
	sort.Sort(D.ZoneMenInfoSort(allInfo))
	for index, info := range allInfo {
		//log.Infof("%+v", info)
		log.Infof("%2d %+v", index, GetZongMenInfoDesc(info))
	}
	return allInfo
}

/*
人机
71 AB 00 00 02 49 00 00 2E 51 00 00 02D4 07 01 81 E2 08 00 10 00
1A 6D 08 FF FF FF FF FF FF FF FF FF 01 12 0C E9 99 86 E7 A7 80 E4 BB 99 E9 95 BF          1A 45 08 00 10 01 18 BC B6 15 20 06 2A 09 E6 B2 AB E7 AB B9 E5 A6 83 30 92 4E 38 04 40 01 4A 06 08 03 12 02 32 34 4A 07 08 02 12 03 39 38 33    4A 07 08 01 12 03 31 30 34 52 06 08 0C 12 02 33 31 62 01 30 68 1F 70 00 20 96 E6 E4 D5 B2 32 28 00 30 01 40 00
1A 70 08 FF FF FF FF FF FF FF FF FF 01 12 0F E9 9F A6 E5 9B 9B E8 BF 8E E6 98 9F E5 90 9B 1A 45 08 01 10 01 18 9A B6 15 20 06 2A 09 E9 A6 99 E8 8B A5 E5 B7 A7 30 93 4E 38 05 40 01 4A 06 08 03 12 02 32 34 4A 08 08 02 12 04 31 31 30 31 4A 06 08 01 12 02 39 33    52 06 08 0D 12 02 32 39 62 01 30 68 1D 70 00 20 96 E6 E4 D5 B2 32 28 00 30 01 40 00
1A 70 08 FF FF FF FF FF FF FF FF FF 01 12 0F E7 99 BD E5 8D BF E5 90 88 E6 98 9F E5 90 9B 1A 45 08 02 10 01 18 CB B6 15 20 06 2A 09 E7 92 87 E5 84 BF E5 8D 8E 30 93 4E 38 09 40 01 4A 06 08 03 12 02 32 34 4A 08 08 02 12 04 31 31 34 31 4A 06 08 01 12 02 39 32    52 06 08 0E 12 02 32 38 62 01 30 68 1C 70 00 20 96 E6 E4 D5 B2 32 28 00 30 01 40 00
1A 70 08 FF FF FF FF FF FF FF FF FF 01 12 0F E9 A5 B6 E6 8B 90 E8 86 80 E5 A4 A7 E4 BB 99 1A 45 08 03 10 01 18 B3 B6 15 20 06 2A 09 E7 B4 AB E7 91 B6 E5 A6 83 30 92 4E 38 09 40 01 4A 06 08 03 12 02 32 34 4A 08 08 02 12 04 31 30 37 35 4A 06 08 01 12 02 39 37    52 06 08 0C 12 02 33 30 62 01 30 68 1E 70 00 20 96 E6 E4 D5 B2 32 28 00 30 01 40 00
1A 6C 08 FF FF FF FF FF FF FF FF FF 01 12 0C E8 B0 AD E5 A4 9C E9 81 93 E5 B0 8A          1A 44 08 04 10 01 18 A8 B6 15 20 06 2A 09 E9 9B AA E8 8A 99 E4 B8 BD 30 93 4E 38 06 40 01 4A 06 08 03 12 02 32 34 4A 07 08 02 12 03 39 38 31    4A 06 08 01 12 02 39 37    52 06 08 0F 12 02 33 32 62 01 30 68 20 70 00 20 96 E6 E4 D5 B2 32 28 00 30 01 40 00
真人
1A 74 08 D1 82 B8 B9 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E8 87 B3 E7 AE 80 1A 48 08 C0 08 10 01 18 BC B6 15 20 1E 2A 09 E5 A4 A9 E6 9C BA E5 AD 90 30 A0 4E 38 08 40 00 4A 07 08 03 12 03 31 32 30 4A 08 08 02 12 04 35 33 34 37 4A 07 08 01 12 03 34 37 36 52 06 08 09 12 02 36 31 62 01 30 68 00 70 00 20 FC A7 EE F3 B2 32 28 00 30 02 38 AC E6 BD 01 40 00
1A 78 08 91 E7 87 B9 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E6 97 A0 E7 95 8F 1A 4C 08 A2 08 10 02 18 C6 B6 15 18 A3 B6 15 20 1D 2A 09 E7 8E 84 E9 A3 8E E5 AD 90 30 9E 4E 38 01 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 35 38 37 38 4A 07 08 01 12 03 35 33 37 52 06 08 06 12 02 36 35 62 01 30 68 00 70 00 20 A0 F6 91 D5 B2 32 28 00 30 02 38 AB E6 BD 01 40 00
1A 6B 08 A7 B3 E0 B8 C0 5A 12 06 E5 86 AF E5 86 AF 1A 48 08 C4 08 10 01 18 C1 B6 15 20 1E 2A 09 E4 BA 91 E9 9A 90 E9 A3 9E 30 9D 4E 38 08 40 00 4A 07 08 03 12 03 31 32 30 4A 08 08 02 12 04 35 32 39 31 4A 07 08 01 12 03 34 37 32 52 06 08 0A 12 02 36 35 62 01 30 68 00 70 00 20 9A 95 DE C5 B2 32 28 00 30 02 38 AB E6 BD 01 40 00
1A 78 08 91 E7 87 B9 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E6 97 A0 E7 95 8F 1A 4C 08 9F 08 10 02 18 E4 B6 15 18 A9 B6 15 20 1D 2A 09 E7 A2 A7 E8 90 BD E5 B0 98 30 95 4E 38 07 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 35 38 39 34 4A 07 08 01 12 03 35 33 35 52 06 08 06 12 02 36 36 62 01 30 68 00 70 00 20 FF D3 91 D5 B2 32 28 00 30 02 38 AB E6 BD 01 40 00
1A 7C 08 D6 97 E4 B8 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E7 BC BA E9 92 B1 1A 50 08 A1 08 10 03 18 A9 B6 15 18 B3 B6 15 18 CB B6 15 20 1D 2A 09 E6 B8 85 E5 87 89 E5 AD 90 30 92 4E 38 02 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 36 39 38 30 4A 07 08 01 12 03 36 34 30 52 06 08 07 12 02 38 34 62 01 30 68 00 70 00 20 D7 89 F0 F7 B2 32 28 00 30 02 38 AB E6 BD 01 40 00
1A 7F 08 BF B3 A1 B9 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E9 80 8D E9 81 A5 E9 81 A5 1A 50 08 E0 07 10 03 18 C7 B6 15 18 99 B6 15 18 A9 B6 15 20 1D 2A 09 E6 98 9F E8 BE B0 E9 80 B8 30 95 4E 38 07 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 36 38 35 39 4A 07 08 01 12 03 36 35 32 52 06 08 08 12 02 37 35 62 01 30 68 00 70 00 20 BD BB D0 FB B2 32 28 00 30 02 38 AC E6 BD 01 40 00
1A 7F 08 BF B3 A1 B9 C0 5A 12 12 E9 9B A8 E8 BD A9 E4 B8 B6 E9 80 8D E9 81 A5 E9 81 A5 1A 50 08 E3 07 10 03 18 A9 B6 15 18 C2 B6 15 18 9E B6 15 20 1D 2A 09 E7 8E 89 E7 A0 B4 E7 A9 BA 30 94 4E 38 01 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 36 39 37 34 4A 07 08 01 12 03 36 32 32 52 06 08 05 12 02 37 34 62 01 30 68 00 70 00 20 D5 9F D0 FB B2 32 28 00 30 02 38 AC E6 BD 01 40 00
1A 78 08 D6 97 E4 B8 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E7 BC BA E9 92 B1 1A 4C 08 A5 08 10 02 18 B7 B6 15 18 BE B6 15 20 1D 2A 09 E4 BA 91 E6 B5 B7 E6 B8 B8 30 A9 4E 38 08 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 35 39 37 32 4A 07 08 01 12 03 35 33 39 52 06 08 09 12 02 36 38 62 01 30 68 00 70 00 20 B8 C2 EE F7 B2 32 28 00 30 02 38 AB E6 BD 01 40 00
1A 74 08 D6 97 E4 B8 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E7 BC BA E9 92 B1 1A 48 08 A7 08 10 01 18 C1 B6 15 20 1D 2A 09 E8 A1 8C E4 BA 91 E4 BB 99 30 9B 4E 38 02 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 34 39 36 36 4A 07 08 01 12 03 34 36 33 52 06 08 08 12 02 36 33 62 01 30 68 00 70 00 20 D6 80 F4 F7 B2 32 28 00 30 02 38 AB E6 BD 01 40 00
1A 7C 08 83 FD C5 B9 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E7 81 AB E7 81 AB 1A 50 08 91 08 10 03 18 B8 B6 15 18 BC B6 15 18 A8 B6 15 20 1D 2A 09 E7 8E 84 E9 A3 8E E5 AD 90 30 AC 4E 38 08 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 36 39 32 33 4A 07 08 01 12 03 36 32 33 52 06 08 08 12 02 37 35 62 01 30 68 00 70 00 20 FC 85 B7 82 B3 32 28 00 30 02 38 AD E6 BD 01 40 00
1A 78 08 AD 99 AA B9 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E7 A9 BA E7 99 BD 1A 4C 08 AB 08 10 02 18 A9 B6 15 18 A4 B6 15 20 1D 2A 09 E5 A4 A9 E7 A9 BA E6 B8 B8 30 9B 4E 38 08 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 35 39 39 34 4A 07 08 01 12 03 35 35 37 52 06 08 05 12 02 36 36 62 01 30 68 00 70 00 20 D5 CA D0 F4 B2 32 28 00 30 02 38 AC E6 BD 01 40 00
1A 74 08 83 FD C5 B9 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E7 81 AB E7 81 AB 1A 48 08 F1 07 10 01 18 AD B6 15 20 1D 2A 09 E9 9C 9C E5 A4 A9 E9 80 B8 30 94 4E 38 08 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 35 30 31 34 4A 07 08 01 12 03 34 36 37 52 06 08 06 12 02 35 32 62 01 30 68 00 70 00 20 AB 91 B4 AA B2 32 28 00 30 02 38 AD E6 BD 01 40 00
1A 78 08 91 E7 87 B9 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E6 97 A0 E7 95 8F 1A 4C 08 A5 08 10 02 18 BD B6 15 18 CB B6 15 20 1D 2A 09 E4 BA 91 E5 BD B1 E5 B0 98 30 92 4E 38 07 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 36 30 31 35 4A 07 08 01 12 03 35 32 35 52 06 08 08 12 02 36 34 62 01 30 68 00 70 00 20 A5 A8 92 D5 B2 32 28 00 30 02 38 AB E6 BD 01 40 00
1A 76 08 F7 C1 92 B9 C0 5A 12 11 E9 9B A8 E8 BD A9 C2 B7 E2 9C A8 E6 98 9F E6 98 9F 1A 48 08 B8 08 10 01 18 B2 B6 15 20 1E 2A 09 E7 81 B5 E5 8A A8 E6 B8 B8 30 A4 4E 38 03 40 00 4A 07 08 03 12 03 31 32 30 4A 08 08 02 12 04 35 32 31 34 4A 07 08 01 12 03 34 38 39 52 06 08 0A 12 02 36 34 62 01 30 68 00 70 00 20 BF DA 95 D4 B2 32 28 00 30 02 38 AC E6 BD 01 40 00
1A 7C 08 D6 97 E4 B8 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E7 BC BA E9 92 B1 1A 50 08 AA 08 10 03 18 C7 B6 15 18 AA B6 15 18 A3 B6 15 20 1D 2A 09 E5 AF 92 E5 86 B0 E5 BF 83 30 A9 4E 38 03 40 00 4A 07 08 03 12 03 31 31 36 4A 08 08 02 12 04 36 38 30 33 4A 07 08 01 12 03 36 32 38 52 06 08 0A 12 02 37 35 62 01 30 68 00 70 00 20 D2 90 F4 F7 B2 32 28 00 30 02 38 AB E6 BD 01 40 00
1A 7C 08 8F A3 B0 B8 C0 5A 12 0F E9 9B A8 E8 BD A9 E4 B8 B6 E5 B0 8F E9 B1 BC 1A 50 08 F1 08 10 03 18 A9 B6 15 18 C6 B6 15 18 B7 B6 15 20 1E 2A 09 E9 9B A8 E5 A4 9C E9 80 B8 30 AB 4E 38 03 40 00 4A 07 08 03 12 03 31 32 30 4A 08 08 02 12 04 37 32 37 35 4A 07 08 01 12 03 36 36 30 52 06 08 0A 12 02 39 35 62 01 30 68 00 70 00 20 99 A4 8C 81 B3 32 28 00 30 02 38 AA E6 BD 01 40 00

*/
//查看道友弟子回复
func ParaZoneMenOtherInfo(dataBytes []byte) []D.ZoneMenInfo {
	var allInfo []D.ZoneMenInfo
	if len(dataBytes) < 5 {
		return allInfo
	}
	data := BytesToHexStr(dataBytes)
	if len(dataBytes) == 2 {
		return nil
	}
	// 定义正则表达式                                            1 所属道友ID                         2 所属道友名                       3 弟子编号                4 天赋数量    5 天赋                       6 等级                      7 弟子姓名           8              9              10                                              11 属性                12 属性值                              13  结伴到期时间     14 指定结伴          15                                     16 限制等级
	re := regexp.MustCompile(`1A(?:[0-9A-F]{2}){1,2}08((?:[0-9A-F]{2}){6,10})12[0-9A-F]{2}((?:[0-9A-F]{2})+?)1A[0-9A-F]{2}08((?:[0-9A-F]{2}){1,2})10([0-9A-F]{2})((?:18[0-9A-F]{2}B615)+?)20([0-9A-F]{2})2A[0-9A-F]{2}((?:[0-9A-F]{2})+?)30([0-9A-F]{4})38([0-9A-F]{2})40([0-9A-F]{2})4A(?:[0-9A-F]{2})+?52[0-9A-F]{2}08([0-9A-F]{2})12[0-9A-F]{2}((?:3[0-9])+?)62(?:[0-9A-F]{2})+?20(00|[0-9A-F]{12})28(00|[0-9A-F]{12})30([0-9A-F]{2})(?:38(?:[0-9A-F]{2}){1,6})?40([0-9A-F]{2})`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	// 打印结果
	for _, regRes := range res {
		info := D.ZoneMenInfo{
			PID:      regRes[1],                            //所属道友ID
			PName:    HexDataStrToStr(regRes[2]),           //所属道友名字
			Name:     HexDataStrToStr(regRes[7]),           //弟子姓名
			Num:      regRes[3],                            //弟子编号
			Level:    OneByteHexStrToByte(regRes[6]),       //弟子等级
			Res8:     regRes[8],                            //
			Gender:   OneByteHexStrToByte(regRes[9]),       //性别类型
			IsBoy:    false,                                //是男孩
			Res10:    OneByteHexStrToByte(regRes[10]),      //
			Attr:     int(OneByteHexStrToByte(regRes[11])), //属性
			AttrVal:  HexDataStrToInt64(regRes[12]),        //属性值
			Pairing:  false,                                //是否在结伴中
			IsDamage: false,                                //是否是增减伤属性
			Limit:    OneByteHexStrToByte(regRes[16]),      //限制结伴弟子等级
		}
		if CheckIsBoyByGender(info) {
			info.IsBoy = true
		}
		// 匹配特质
		re0 := regexp.MustCompile(`18([0-9A-F]{2})B615`)
		res0 := re0.FindAllStringSubmatch(regRes[5], -1)
		for _, regRes := range res0 {
			aptitude := OneByteHexStrToByte(regRes[1])
			if aptitude >= 0xF0 && aptitude <= 0xFF {
				info.IsDamage = true
			}
			info.Aptitude = append(info.Aptitude, aptitude)
		}
		allInfo = append(allInfo, info)
	}
	sort.Sort(D.ZoneMenInfoOtherSort(allInfo))
	for index, info := range allInfo {
		log.Infof("%+v", info)
		log.Infof("%2d %+v", index, GetZongMenInfoDesc(info))
	}
	return allInfo
}
